/*******************************************************************/
/* @ All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.        */
/*                                                                 */
/*  NAME      = frreport_comm.c                                    */
/*  NOTE      = report_comm公用                                    */
/*  DATE      = 2014/12/23                                         */
/*******************************************************************/

#ifndef __FRREPORT_COMM_H_
#define __FRREPORT_COMM_H_

#include "frcomm.h"
#include "frmem.h"

#include "module.h"
#include "frreport_mng.h"

void frreport_free_l7data_field(FRl7data_field **pp_st_l7data_field);

/*******************************************************************************
*  FUNC     :  保存l7 data 数据到链表
*  ARGS     :  p_st_hash_report     (Frhash_header *; 数据保存到hash)
*           :  p_st_ct              (Conntrack *)
*           ：  p_st_trans_info      (p_st_trans_info 协议分析释放)
*           :  i_use_request        (当前数据是 request)
*           :  i_response_required  (0:不期待响应数据,1:有response数据)
*           :  i_use_response       (当前数据是 response)
*           :  p_st_lst_hdr_req     (Frlist_header *;p_st_lst_hdr_req和里面的数据Frdata_field,由apm进行释放)
*           :  p_st_lst_hdr_resp    (Frlist_header *;p_st_lst_hdr_resp和里面的数据Frdata_field,由apm进行释放)
*  RTN      :  成功:FR_SUCC; 失败:FR_FAIL
*  NOTE     :
*******************************************************************************/
int frreport_add_l7data( Frhash_header *p_st_hash_report
                       , Conntrack     *p_st_ct
                       , Frtrans_info  *p_st_trans_info
                       , int i_use_request
                       , int i_response_required
                       , int i_use_response
                       , Frlist_header *p_st_lst_hdr_req
                       , Frlist_header *p_st_lst_hdr_resp);

/*******************************************************************************
*  FUNC     :  保存session 数据到链表
*  ARGS     :  p_st_hash_report (Frhash_header *; 数据保存到hash)
*           :  p_st_ct          (Conntrack *)
*           :  st_timestamp     (数据发生时间)
*           :  p_st_lst_session_data    (Frlist_header *; session数据;
*           :                    p_st_lst_session_data和里面的数据Frdata_field,由apm进行释放)
*           :  i_status         (用户登录 / 用户退出)
*  RTN      :  成功:FR_SUCC; 失败:FR_FAIL
*  NOTE     :
*******************************************************************************/
int frreport_add_session_data(Frhash_header *p_st_hash_report   //保存Frreport_data
                              , Conntrack *p_st_ct
                              , struct timeval st_timestamp
                              , Frlist_header *p_st_lst_session_data
                              , int i_status);

/*******************************************************************************
*  FUNC     :  保存关联连接信息
*  ARGS     :  p_st_hash_report (Frhash_header *; 数据保存到hash)
*           :  p_st_ct          (Conntrack *)
*           :  ip_proto         (IPPROTO_TCP/IPPROTO_UDP)
*           :  src_ip           (原ip)
*           :  dst_ip           (目的ip)
*           :  dst_port         (目的port)
*           :  ui_redirect_ip   (重定向ip)
*           :  us_redirect_port (重定向port)
*           :  st_timestamp     (数据发生时间)
*  RTN      :  成功:FR_SUCC; 失败:FR_FAIL
*  NOTE     :
*******************************************************************************/
int frreport_add_conn_expect(Frhash_header *p_st_hash_report
                             , u_short ip_proto
                             , u_int src_ip
                             , u_int dst_ip
                             , u_short dst_port
                             , u_int   ui_redirect_ip
                             , u_short us_redirect_port
                             , struct timeval st_timestamp);

void frreport_free_trans_info(Frtrans_info *p_st_trans_info);

#endif
